Java基础第三天--内部类、常用API

形参和返回值

抽象类名作为形参和返回值

  • 方法的形参是抽象类名,其实需要的是该抽象类的子类对象
  • 方法的返回值是抽象类名,其实返回的是该抽象类的子类对象

接口名作为形参和返回值

  • 方法的形象是接口名,其实需要的是该接口的实现类对象
  • 方法的返回值是接口名,其实返回的是该接口的实现类对象

内部类

内部类概述

  • 内部类:就是在一个类中定义一个类
  • 内部类的定义格式

格式:

   public class 类名{
       修饰符 class 类名{
       }
   }

范例:

    public class Outer{
        public class Inner{
        }
    }

成员内部类

按照内部类在类中定义的位置不同,可以分为如下两种形式

  • 在类的成员位置:成员内部类
  • 在类的局部位置:局部内部类

成员内部类,外界如何创建对象使用呢?

  • 格式:外界类名.内部类名 对象名 = 外部类对象.内部类对象;
  • 范例:Outer.Inner oi = new Outer().newInner();
    //成员内部类
    public class Outer {
        private int num = 10;

        /*
        public class Inner {
            public void show(){
                System.out.println(num);
            }
        }
        */
        private class Inner {
            public void show(){
                System.out.println(num);
            }
        }

        public void method(){
            Inner i = new Inner();
            i.show();
        }
    }
    //测试类
    public class InnerDemo {
        public static void main(String[] args){
//          Outer.Inner oi = new Outer().new Inner();
//          oi.show();//10

            Outer o = new Outer();
            o.method();//10
        }
    }

局部内部类

局部内部类是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用该类可以直接访问外部类的成员,也可以访问方法内的局部变量

    //局部内部类
    public class Outer {
        private int num = 10;

        public void method(){
            int num2 = 20;
            class Inner{
                public void show(){
                    System.out.println(num); 
                    System.out.println(num2);
                }
            } 

            Inner i = new Inner();  
            i.show();
    //测试类
    public class OuterDemo {
        public static void main(String[] args){
            Outer o = new Outer();
            o.method();
            //10
            //20
        }
    }

匿名内部类

前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类

  • 格式:
   new 类名或者接口名(){
       重写方法;
   }
  • 范例:
    new Inter(){
        public void show(){
        }
    }

本质:是一个继承了该类或则该接口的子类匿名对象

    public class Outer {
        public void method() {
            /*
            new Inter() {
                @override
                public void show() {
                    System.out.println("匿名内部类");
                }
            }.show();
            */
            Inter i = new Inter(){
                @override
                public void show() {
                    System.out.println("匿名内部类");
                }
            };
            //多次调用
            i.show();
            i.show();
        }
    }
    public interface Inter {
        void show();
    }
    public class OuterDemo {
        public static void main(String[] args){
            Outer o = new Outer();
            o.method();
        }
    }

常用API

Math类概述

包含执行基本数字运算的方法

Math类的常用方法

方法名 说明
public static int abs(inta) 返回参数的绝对值
public static double ceil(double a) 返回>或=参数的最小double值,等于一个整数
public static double floor(double a) 返回<或=参数的最大double值,等于一个整数
public static int round(float a) 按照四舍五入返回最接近参数的int
public static int max(int a,int b) 返回int值中较大值
public static int min(int a,int b) 返回int值中较小值
public static double pow(double a,double b) 返回a的b次幂的值
public static double random() 返回值为double的正值[0.0,1.0)

System类概述

System包含几个有用的类字段和方法,它不能被实例化

System类的常用方法

方法名 说明
public static void exit(int status) 终止当前运行的Java虚拟机,非零表示异常终止
public static long currentTimeMills() 返回当前时间(以毫秒为单位)

Object类的概述

Object是类层次结构的根,每个类都可以将Object作为超类。所有类都直接或者间接的继承自该类

方法名 说明
public String toString 返回对象的字符串表示形式。建议所有子类重写该方法,自动生成
public boolean equals(Object obj) 比较对象是否相等。默认比较地址,重写可以比较内容,自动生成

冒泡排序

  • 如果有N个数据进行排序,总需要比较N-1次
  • 每一次比较完毕,下一次的比较就会少一个数据参与
    public class ArrayDemo {
        public static void main(String[] args){
            //定义一个数组
            int[] arr = {24,69,80,57,13}
            System.out.println("排序前:" + arrayToString(arr));
            
            for(int j = 0 ; j < arr.length-1 ; j++){
                for(int i = 0 ; i < arr.length-1-j ; i++){
                    if(arr[i] > arr[i+1]){
                        int temp = arr[i];
                        arr[i] = arr[i+1];
                        arr[i+1] = temp;
                    }  
                }
            }
            System.out.println("排序后:" + arrayToString(arr));
        }

        //把数组中的元素按照指定的规则组成一个字符串:[元素1,元素2,...]
        public static String arrayToString(int[] arr){
            StringBulider sb = new StringBulider();
            sb.append("[");
            for(int i= 0;i < arr.length;i++) {
                if (i == arr.length - 1) {
                    sb.append(arr[i]);
                }else {
                    sb.append(arr[i]).append(",");
                }
            }
            sb.append("]");
            String s = sb.toString();
            return s;
        }
    }
posted @ 2019-11-14 21:24  双眼皮的小眼睛  阅读(283)  评论(0编辑  收藏  举报